package helpers

import (
	"encoding/json"
	"strconv"
)

// StringToInt 将字符串转换为 int 类型
// 如果转换失败，返回默认值
func StringToInt(s string, defaultValue int) int {
	if i, err := strconv.Atoi(s); err == nil {
		return i
	}
	return defaultValue
}

// StringToInt64 将字符串转换为 int64 类型
// 如果转换失败，返回默认值
func StringToInt64(s string, defaultValue int64) int64 {
	i, err := strconv.ParseInt(s, 10, 64)
	if err != nil {
		return defaultValue
	}
	return i
}

// IntToString 将 int 类型转换为字符串
func IntToString(i int) string {
	return strconv.Itoa(i)
}

// Int64ToString 将 int64 类型转换为字符串
func Int64ToString(i int64) string {
	return strconv.FormatInt(i, 10)
}

// StringToUint 将字符串转换为 uint 类型
// 如果转换失败，返回默认值
func StringToUint(s string, defaultValue uint) uint {
	i, err := strconv.ParseUint(s, 10, 64)
	if err != nil {
		return defaultValue
	}
	return uint(i)
}

// StringToUint64 将字符串转换为 uint64 类型
// 如果转换失败，返回默认值
func StringToUint64(s string, defaultValue uint64) uint64 {
	i, err := strconv.ParseUint(s, 10, 64)
	if err != nil {
		return defaultValue
	}
	return i
}

// ToJSON 将任意数据转换为JSON字符串
func ToJSON(data interface{}) (string, error) {
	jsonData, err := json.Marshal(data)
	if err != nil {
		return "", err
	}
	return string(jsonData), nil
}
